package com.main.meldungsverwaltung;

import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * Repräsentiert ein Name:Wert - Paar für das Detail-Feld. Besteht aus einem
 * Label und einem Textfeld.
 * 
 * @author felix
 * 
 */
public class LabelTextField extends JPanel {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JLabel label;
	private JComponent textField;

	/**
	 * LabelTextField wird konfiguriert.
	 * 
	 * @param labelText
	 *            Text für das Label
	 * @param brauchtTextArea
	 *            gibt an ob eine TextArea zum Anzeigen des Texts gebraucht wird
	 */
	public LabelTextField(String labelText, boolean brauchtTextArea) {
		if (brauchtTextArea)
			textField = new JTextArea();
		else
			textField = new JTextField();

		label = new JLabel(labelText);
		this.setLayout(new GridBagLayout());

		label.setLabelFor(textField);
		label.setHorizontalAlignment(JLabel.CENTER);
		label.setVerticalAlignment(JLabel.CENTER);

		textField.setFont(new Font(Font.SANS_SERIF, Font.PLAIN, 16));
		label.setFont(new Font("Segoe UI", Font.CENTER_BASELINE, 13));

		if (textField instanceof JTextField)
			((JTextField) textField).setHorizontalAlignment(JTextField.CENTER);

		if (textField instanceof JTextArea) {
			((JTextArea) textField).setLineWrap(true);
		}

		textField.addFocusListener(new FocusListener() {

			@Override
			public void focusLost(FocusEvent arg0) {
				// TODO Auto-generated method stub

			}

			@Override
			public void focusGained(FocusEvent arg0) {
				if (textField instanceof JTextField)
					((JTextField) textField).selectAll();
			}
		});

		GridBagConstraints c = new GridBagConstraints();

		c.gridx = 0;
		c.gridy = 0;
		c.insets = new Insets(1, 5, 1, 5);
		this.add(label, c);

		c.gridx = 1;
		c.gridy = 0;
		c.weightx = 1.0;
		c.fill = GridBagConstraints.HORIZONTAL;
		c.insets = new Insets(1, 5, 1, 5);
		this.add(textField, c);
	}

	/**
	 * Setzt den Text des Textfeldes auf den übergebenen Text.
	 * 
	 * @param textFieldText
	 *            der Text
	 */
	public void setTextFieldText(String textFieldText) {
		if (textField instanceof JTextField)
			((JTextField) textField).setText(textFieldText);
		else
			((JTextArea) textField).setText(textFieldText);
	}

	/**
	 * Setzt das Textfeld auf disabled.
	 */
	public void setReadOnly() {
		if (textField instanceof JTextField)
			((JTextField) textField).setEditable(false);
		else
			((JTextArea) textField).setEditable(false);
	}

	/**
	 * Liefert den Text des Textfelds/Textarea zurück.
	 * 
	 * @return
	 */
	public String getText() {
		if (textField instanceof JTextField)
			return ((JTextField) textField).getText();
		else
			return ((JTextArea) textField).getText();
	}

}
